/*
 * Pantalla.cpp
 *
 *  Created on: 08/10/2009
 *      Author: ale
 */

#include "Pantalla.h"
#include "../src/Definiciones.h"

Pantalla::Pantalla() {
	std::vector<Punto> puntos;

	/*Panel principal*/
	puntos.push_back(Punto(0, 0));
	puntos.push_back(Punto(60, 0));
	puntos.push_back(Punto(60, -30));
	puntos.push_back(Punto(W_PANEL_PPL - 60, -30));
	puntos.push_back(Punto(W_PANEL_PPL - 60, 0));
	puntos.push_back(Punto(W_PANEL_PPL, 0));
	puntos.push_back(Punto(W_PANEL_PPL, H_PANEL_TAPA));
	puntos.push_back(Punto(0, H_PANEL_TAPA));
	puntos.push_back(Punto(0, 0));
	paneles.push_back(Poligono(puntos));
	paneles[0].setColorPintura(Color(GRIS));
	paneles[0].setColorLinea(Color(GRIS));
	puntos.clear();
	puntos.push_back(Punto(20, 0));
	puntos.push_back(Punto(W_PANEL_PANT - 20, 0));
	puntos.push_back(Punto(W_PANEL_PANT, 20));
	puntos.push_back(Punto(W_PANEL_PANT, H_PANEL_PANT));
	puntos.push_back(Punto(0, H_PANEL_PANT));
	puntos.push_back(Punto(0, 20));
	puntos.push_back(Punto(20, 0));
	paneles.push_back(Poligono(puntos));
	paneles[1].setColorPintura(Color(GRIS_CLARO));
	paneles[1].setColorLinea(Color(GRIS_CLARO));

	puntos.clear();
	puntos.push_back(Punto(0, 0));
	puntos.push_back(Punto(W_PANT, 0));
	puntos.push_back(Punto(W_PANT, H_PANT));
	puntos.push_back(Punto(0, H_PANT));
	puntos.push_back(Punto(0, 0));
	paneles.push_back(Poligono(puntos));
	paneles[2].setColorPintura(Color(CELESTE));
	paneles[2].setColorLinea(Color(CELESTE));

	for (int j = 0; j < 2; j++) {
		for (int i = 1; i < 6; i++) {
			posNum.push_back(
					Punto(W_PANT - (W_NUMERO*0.6* i) - 15, (j *1.41* H_NUMERO) + 10));
		}
	}

}

Pantalla::~Pantalla() {
}

void Pantalla::pintarNum(Matriz3D& mat) {
	Matriz3D T, E, *temp2;
	E.setEscalado(0.75);

	std::list<Numero>::reverse_iterator it = numeros.rbegin();
	for (unsigned i = 0; i < numeros.size(); ++i) {
		T.setTraslacion(posNum[i]);
		 temp2 = mat*T;
		(*it).pintar(*temp2);
		(*it).dibujarContorno(*temp2);

		delete temp2;
		it++;
	}
}

void Pantalla::dibujarContorno(Matriz3D& mat) {
	Matriz3D T1, T2, *a;
	T1.setTraslacion(Punto(30, 30));
	T2.setTraslacion(Punto(10, 20));
	paneles[0].dibujarContorno(mat);
	a = mat * T1;
	paneles[1].dibujarContorno(*a);
	Matriz3D *temp = (*a) * T2;
	delete a;
	paneles[2].dibujarContorno(*temp);
	pintarNum(*temp);
	delete temp;

}

void Pantalla::pintar(Matriz3D& mat) {

	Matriz3D T1, T2,  *a;
	T1.setTraslacion(Punto(30, 30));
	T2.setTraslacion(Punto(10, 20));
	paneles[0].pintar(mat);
	paneles[0].dibujarContorno(mat);
	a = mat * T1;
	paneles[1].pintar(*a);
	paneles[1].dibujarContorno(*a);
	Matriz3D *temp = ((*a) * T2);
	delete a;
	paneles[2].pintar(*temp);
	paneles[2].dibujarContorno(*temp);
	pintarNum(*temp);
	delete temp;
}


void Pantalla::agregarNumero(int num) {
	if (numeros.size() == 10) {
		numeros.pop_front();
	}
	Numero n(num);
	n.setColorFondo(Color(CELESTE));
	n.setColorPintura(Color(NEGRO));
	numeros.push_back(n);
}

